package com.crois.barrier.admin.dto;

import com.baomidou.mybatisplus.annotation.TableField;
import com.crois.barrier.admin.entity.ApiFailCodeInfo;
import com.crois.barrier.admin.entity.ApiParameterInfo;
import com.crois.barrier.admin.entity.ApiResponseInfo;
import com.crois.barrier.admin.entity.IpAndWeight;
import com.zhimydou.zdf.wf.dto.AbstractBizDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.util.Date;
import java.util.List;

/**
 * barrier api路由信息
 * @author Hou Ze Yu
 * @date 2021-10-25 11:58:25
 */
@ApiModel("barrier api路由信息")
@Getter
@Setter
@ToString
public class ApiRouteInfoDto extends AbstractBizDto<Integer> {



    /**
     *  
     */
    @ApiModelProperty("")
    private Integer id;

    /**
     *  api组id
     */
    @ApiModelProperty("api组id")
    private Integer apiRouteGroupId;

    /**
     *  api组名称
     */
    @ApiModelProperty("api组名称")
    private String apiRouteName;

    /**
     *  api描述
     */
    @ApiModelProperty("api描述")
    private String description;

    /**
     *  请求路径
     */
    @ApiModelProperty("请求路径")
    private String requestPath;

    /**
     *  是否跨域 1 是 0 否
     */
    @ApiModelProperty("是否跨域 1 是 0 否")
    private Boolean enableCors;

    /**
     *  后端路径
     */
    @ApiModelProperty("后端路径")
    private String servicePath;

    /**
     *  匹配类型 1 精准匹配 2 模糊匹配
     */
    @ApiModelProperty("匹配类型 1 精准匹配 2 模糊匹配")
    private Integer matchType;

    /**
     *  服务转发策略
     */
    @ApiModelProperty("服务转发策略")
    private String upstreamStrategy;

    /**
     *  如果是listofserver策略需要字段
     */
    @ApiModelProperty("如果是listofserver策略需要字段")
    private String serviceName;

    /***
     * url地址
     */
    @ApiModelProperty("url地址")
    private String url;

    /**
     *  前缀路由是否生效
     */
    @ApiModelProperty("前缀路由是否生效")
    private Boolean isPrefix;

    /**
     *  路由状态 1 发布 0 未发布
     */
    @ApiModelProperty("路由状态 1 发布 0 未发布")
    private Integer enabled;

    /**
     *  请求方法 GET POST  PUT DELETE OPTION
     */
    @ApiModelProperty("请求方法 GET POST  PUT DELETE OPTION")
    private String requestMethod;

    /**
     *  后端方法  GET POST  PUT DELETE OPTION
     */
    @ApiModelProperty("后端方法  GET POST  PUT DELETE OPTION")
    private String backendMethod;

    /**
     *  协议  http / https
     */
    @ApiModelProperty("协议  http / https")
    private String protocol;

    /**
     *  入参请求模式 1 入参映射（过滤未知参数） 2 入参映射（透传未知参数） 3  入参透传
     */
    @ApiModelProperty("入参请求模式 1 入参映射（过滤未知参数） 2 入参映射（透传未知参数） 3  入参透传")
    private Integer enterParameterModel;

    /**
     *  body数据类型 1 其他（json/文件等） 2 （Form）
     */
    @ApiModelProperty("body数据类型 1 其他（json/文件等） 2 （Form）")
    private Integer bodyDataType;

    /**
     *  contentType 类型 1 透传客户端contentType头 2 自定义contentType 内容 3 网关默认
     */
    @ApiModelProperty("contentType 类型 1 透传客户端contentType头 2 自定义contentType 内容 3 网关默认")
    private Integer contentType;

    /**
     *  contentType 内容
     */
    @ApiModelProperty("contentType 内容")
    private String contentTypeText;

    /**
     *  body参数
     */
    @ApiModelProperty("body参数")
    private String bodyDescription;

    /**
     *  权重
     */
    @ApiModelProperty("权重")
    private Integer weight;

    /**
     *  超时时间
     */
    @ApiModelProperty("超时时间")
    private Long timeout;

    /**
     *  重试次数
     */
    @ApiModelProperty("重试次数")
    private Long retry;

    /**
     *  否发布预发环境
     */
    @ApiModelProperty("否发布预发环境")
    private Boolean envBetaPublish;

    /**
     *  否发布生产环境
     */
    @ApiModelProperty("否发布生产环境")
    private Boolean envProdPublish;

    /**
     *  否发布测试环境
     */
    @ApiModelProperty("否发布测试环境")
    private Boolean envTestPublish;

    @ApiModelProperty("api组名称")
    private String ApiGroupName;


    /**
     * APi参数
     */
    @ApiModelProperty("APi参数")
    private List<ApiParameterInfoDto> apiParameter;

    /**
     * APi常量参数
     */
    @ApiModelProperty("APi常量参数")
    private List<ApiParameterInfoDto> constantsParameter;

    /**
     * 返回值
     */
    @ApiModelProperty("APi参数")
    private ApiResponseInfoDto apiResponse;

    /****
     * 指定的ips
     */
    @ApiModelProperty("指定的ips")
    private List<IpAndWeightDto> ipList;

    /**
     * 插件
     */
    @ApiModelProperty("插件")
    private List<String> plugins;


    @Override
    public Integer getId() {
        return id;
    }

    @Override
    public void setId(Integer id) {
        this.id = id;
    }
}
